/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package utilitario;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.PrintWriter;
import java.util.ArrayList;

/**
 *
 * @author Rodrigo
 */
public class ManipularArquivo {

    static final String NEW_LINE = System.getProperty("line.separator");

    public static int salvarNoArquivo(Object objeto) throws ValidaException {
        try {
            File f = new File("../BD/");

            if (!f.exists()) {
                f.mkdir();
            }
            String codigoGerado = String.format("%06d", 1);
            f = new File("../BD/" + objeto.getClass().getName() + ".txt");
            if (f.exists()) {
                FileReader fr = new FileReader(f);
                LineNumberReader lnr = new LineNumberReader(fr);
                lnr.skip(f.length());
                codigoGerado = String.format("%06d", lnr.getLineNumber() + 1);
                lnr.close();
            }

            FileWriter fw = new FileWriter(f, true);

            PrintWriter pw = new PrintWriter(fw);
            pw.println("<codigo=" + codigoGerado + ">," + objeto.toString().replace(" >", ">"));
            pw.flush();
            pw.close();
            return Integer.parseInt(codigoGerado);
        } catch (IOException ex) {
            throw new ValidaException("Ocorreu uma falha ao gravar no arquivo, por favor contate o administrador.");
        }
    }

    public static String buscarNoArquivo(String className, String campoBusca, String valor) throws ValidaException {
        FileReader fr = null;
        try {
            File f = new File("../BD/" + className + ".txt");
            fr = new FileReader(f);
            BufferedReader bfr = new BufferedReader(fr);
            if (campoBusca.equals("codigo")) { //Alteração: if (campoBusca == "codigo") { ...
                valor = String.format("%06d", Integer.parseInt(valor));
            }
            String linha = "", busca = "<" + campoBusca + "=" + valor + ">";
            while ((linha = bfr.readLine()) != null) {
                if (linha.contains(busca)) {
                    return linha;
                }
            }
            return null;
        } catch (FileNotFoundException ex) {
            throw new ValidaException("O arquivo com os dados do objeto não existe.");
        } catch (IOException ex) {
            throw new ValidaException("Ocorreu uma falha ao ler o arquivo, por favor contate o administrador.");
        }
    }

    public static boolean alterarNoArquivo(Object objeto, int codigo) throws ValidaException {
        FileReader fr = null;
        try {
            File f = new File("../BD/" + objeto.getClass().getName() + ".txt");
            fr = new FileReader(f);
            StringBuffer sb = new StringBuffer("");
            BufferedReader bfr = new BufferedReader(fr);
            boolean alterado = false;
            String linha = "", busca = "<codigo=" + String.format("%06d", codigo) + ">";

            while ((linha = bfr.readLine()) != null) {
                if (linha.contains(busca)) {
                    linha = objeto.toString();
                    alterado = true;
                }
                sb.append(linha + NEW_LINE);
            }
            FileWriter fw = new FileWriter(f, false);
            fw.write(sb.toString());
            fw.flush();
            fw.close();
            return alterado;
        } catch (FileNotFoundException ex) {
            throw new ValidaException("O arquivo com os dados do objeto não existe.");
        } catch (IOException ex) {
            throw new ValidaException("Ocorreu uma falha ao ler o arquivo, por favor contate o administrador.");
        }
    }

    public static ArrayList<String> buscarVariosNoArquivo(String className) throws ValidaException {
        FileReader fr = null;
        try {
            File f = new File("../BD/" + className + ".txt");
            fr = new FileReader(f);
            BufferedReader bfr = new BufferedReader(fr);

            String linha = "";
            ArrayList<String> lista = new ArrayList<String>();
            while ((linha = bfr.readLine()) != null) {
                lista.add(linha);
            }
            return lista;
        } catch (FileNotFoundException ex) {
            throw new ValidaException("O arquivo com os dados do objeto não existe.");
        } catch (IOException ex) {
            throw new ValidaException("Ocorreu uma falha ao ler o arquivo, por favor contate o administrador.");
        }
    }

    public static ArrayList<String> buscarVariosNoArquivo(String className, String campoBusca, String valor) throws ValidaException {
        FileReader fr = null;
        try {
            File f = new File("../BD/" + className + ".txt");
            fr = new FileReader(f);
            BufferedReader bfr = new BufferedReader(fr);
            if (campoBusca.equals("codigo")) { //Alteração: if (campoBusca == "codigo") { ...
                valor = String.format("%06d", Integer.parseInt(valor));
            }
            String linha = "", busca = "<" + campoBusca + "=" + valor + ">";
            ArrayList<String> lista = new ArrayList<String>();
            while ((linha = bfr.readLine()) != null) {
                if (linha.contains(busca)) {
                    lista.add(linha);
                }
            }
            return lista;
        } catch (FileNotFoundException ex) {
            throw new ValidaException("O arquivo com os dados do objeto não existe.");
        } catch (IOException ex) {
            throw new ValidaException("Ocorreu uma falha ao ler o arquivo, por favor contate o administrador.");
        }
    }
}
